package cc.magicjson.example.demo.arithmetic;


import org.junit.jupiter.api.Test;

public class Atoi {

    @Test
    public void test() {
        System.out.println(myAtoi("   -123-123"));
    }

    // 将字符串转换为整数的主函数
    public  int myAtoi(String str) {
        // 如果字符串为空或长度为0，直接返回0
        if (str == null || str.isEmpty()) {
            return 0;
        }

        int i = 0, n = str.length(); // 初始化索引i和字符串长度n

        // 去除前导空格
        while (i < n && str.charAt(i) == ' ') {
            i++; // 跳过所有空格字符
        }

        // 如果字符串全是空格，直接返回0
        if (i == n) {
            return 0;
        }

        int sign = 1; // 初始化符号变量，默认为正数
        char firstChar = str.charAt(i); // 获取当前字符

        // 判断符号
        if (firstChar == '+' || firstChar == '-') {
            // 如果是 '+'，符号为正；如果是 '-'，符号为负
            sign = (firstChar == '-') ? -1 : 1;
            i++; // 跳过符号字符
        }

        long result = 0; // 使用long类型存储结果，以防止溢出

        // 转换数字字符为整数
        while (i < n) {
            char c = str.charAt(i); // 获取当前字符

            // 如果遇到非数字字符，停止转换
            if (c < '0' || c > '9') {
                break;
            }

            // 累加当前数字到结果中
            result = result * 10 + (c - '0');

            // 溢出处理，如果超出int范围，返回边界值
            if (result > Integer.MAX_VALUE) {
                return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            i++; // 继续下一个字符
        }

        result *= sign; // 应用符号
        // 返回最终结果，将符号位应用到结果中
        return (int) Math.max(Integer.MIN_VALUE, Math.min(Integer.MAX_VALUE, result));
    }

}